package com.cspm.common.dao;

import com.cspm.common.proxy.DataSource;
import com.cspm.common.proxy.DynamicDataSourceGlobal;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * 基础Dao(还需在XML文件里，有对应的SQL语句)
 * Created by CHQIU on 2017-04-14.
 *
 * @param <E>
 */
@Repository
public interface BaseDao<E> {

    /**
     * 插入数据
     *
     * @param e 实体类
     * @return 主键值
     */
    @DataSource(DynamicDataSourceGlobal.WRITE)
    public long insert(E e);

    /**
     * 批量插入数据
     *
     * @param data 实体类
     * @return 主键值
     */
    @DataSource(DynamicDataSourceGlobal.WRITE)
    public void batchInsert(List<E> data);

    /**
     * 根据主键更新数据
     *
     * @param e 新数据
     */
    @DataSource(DynamicDataSourceGlobal.WRITE)
    public Integer updateByPrimary(E e);

    /**
     * 根据主键获取数据
     *
     * @param e 查询条件
     * @return 查询结果
     */
    @DataSource(DynamicDataSourceGlobal.READ)
    public E getByPrimary(E e);

    /**
     * 根据查询条件获取一条记录
     *
     * @param conditions 查询条件
     * @return 查询结果
     */
    @DataSource(DynamicDataSourceGlobal.READ)
    public E getOne(Map<String, Object> conditions);

    /**
     * 根据查询条件查询
     *
     * @param conditions 查询条件
     * @return 结果集
     */
    @DataSource(DynamicDataSourceGlobal.READ)
    public List<E> queryList(Map<String, Object> conditions);

    /**
     * 查询所有数据
     *
     * @return 结果集
     */
    @DataSource(DynamicDataSourceGlobal.READ)
    public List<E> getAll();
}